/**
 * Copyright 2017-2024 the original author or authors from the JHipster project.
 *
 * This file is part of the 微服务代码模版 project, see https://github.com/jhipster/jhipster-online
 * for more information.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
import { Injectable, Component } from '@angular/core';
import { Router } from '@angular/router';
import { NgbModal, NgbModalRef } from '@ng-bootstrap/ng-bootstrap';

import { User, UserService } from 'app/core';

@Injectable({ providedIn: 'root' })
export class UserModalService {
  private isOpen = false;
  constructor(private modalService: NgbModal, private router: Router, private userService: UserService) {}

  open(component: Component, login?: string): NgbModalRef {
    if (this.isOpen) {
      return;
    }
    this.isOpen = true;

    if (login) {
      this.userService.find(login).subscribe(user => this.userModalRef(component, user.body));
    } else {
      return this.userModalRef(component, new User());
    }
  }

  userModalRef(component: Component, user: User): NgbModalRef {
    const modalRef = this.modalService.open(component, { size: 'lg', backdrop: 'static' });
    modalRef.componentInstance.user = user;
    modalRef.result.then(
      () => {
        this.router.navigate([{ outlets: { popup: null } }], { replaceUrl: true });
        this.isOpen = false;
      },
      () => {
        this.router.navigate([{ outlets: { popup: null } }], { replaceUrl: true });
        this.isOpen = false;
      }
    );
    return modalRef;
  }
}
